% Gruppe 4
% Stefan Tuch
% Marcus Riesmeier
% Carsten Weißgerber
% Oliver Dölle

% 1. Beleg, LV Modellbildung und Simulation, Simulationstechnik
% WS 2005/2006/2009 Prof. Janschek / Dr. Range / Dr.-Ing. S. Dyblenko
%
% vpg_algorithmus_ws07.m - Realisierung der VPG-Methode mit Fehlerschätzung
% für PT1-Glied
% zu ergänzende Codezeilen sind mit ">>> ergänzen ...." und ...gekennzeichnet
clear all % Lösche Arbeitsspeicher
Tm = 10; % Konstante des PT1
h = .1; % Schrittweite
t0 = 0; % Integrationsbeginn
tf = 300; % Integrationsende
t = []; % Zeitwerte für Plot [s]
d = []; % Fehler-Schätzwerte
u = []; % Stellwerte u(t)
y = []; % Ausgangswerte y(t)
ys = []; % Soll-Ausgangswerte y_soll(t)
% Initialisierung
[dum,x(1)] = sysmodel_pt1_muster_ws07([],[],[],0);
d(1) = 0;
% Integration nach VPG-Methode
ti = t0;
i = 1;
while ti <= tf
% Berechnung des Soll-Ausgangswertes
if ti<1
    ys(i) = 0;
else
    ys(i) = 5-5*exp(-(ti-1)/Tm);
end
% Berechnung des Stellwertes
if ti<1
    u(i) = 0;
else
    u(i) = 5;
end
if ti+h/2<1
    u_h2 = 0;
else
    u_h2 = 5;
end
if ti+h<1
    u_h = 0;
else
    u_h = 5;
end
% Berechnung des Ausgangswertes
y(i) = sysmodel_pt1_muster_ws07( ti , x(i) , u(i) , 3); %die Parameter einsetzen
% Berechnung der Koeffizienten für VPG-Methode
k1 = sysmodel_pt1_muster_ws07( ti , x(i) , u(i) , 1); %die Parameter einsetzen
k2 = sysmodel_pt1_muster_ws07( ti+h/2 , x(i)+k1*h/2 , u_h2 , 1); %die Parameter einsetzen
k3 = sysmodel_pt1_muster_ws07( ti+h , x(i)-h*k1+2*h*k2 , u_h , 1); %die Parameter einsetzen
% Berechnung des Zustands-Schätzwertes x(ti+h)
x(i+1) = x(i)+h*k2;
% Berechnung der LDF Fehlerabschätzung d(ti+h)
d(i+1) = (h/6)*(k1-2*k2+k3);
t(i) = ti; % Zeitwert für Plot speichern
ti = ti + h; % Zeitvariable um einen Schritt erhöhen
i = i + 1; % Index inkrementieren
end
d = d(1:end-1);
result=[t;d];
% Anzeige der Ergebnisse
figure(1);
subplot(2,1,1); plot(t,u); title('Eingang PT1-Glied');zoom on;grid on;
subplot(2,1,2); plot(t,y); title('Ausgang PT1-Glied');zoom on;grid on;
xlabel('Zeit, s');
figure(2);
subplot(2,1,1); plot(t,y-ys,'.-'); title('GDF berechnet');zoom on;grid on;
tit=sprintf('LDF geschätzt: max. Betrag = %g',max(abs(d)));
subplot(2,1,2); plot(t,d,'.-'); title(tit);zoom on;grid on;
xlabel('Zeit, s');
figure(3);
plot(t,ys,'.-',t,y,'o')
